home *** CD-ROM | disk | FTP | other *** search
/ The Original Shareware 1.1 / The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso / 19 / bix01.zip / STDMENUS.LIB < prev    next >
Text File  |  1986-07-07  |  5KB  |  181 lines

  1.              {  Program Name   : Stdmenus.lib                       }
  2.              {  Date Begun     : 10/01/1985                         }
  3.              {  Last Update    : 01/29/1986                         }
  4.  
  5.              {  Programmer     : Robert L. Hume                     }
  6.  
  7.              {  Copyright      : Robert L. Hume                     }
  8.              {                 : All rights reserved                }
  9.  
  10.              {  Language       : Pascal                             }
  11.              {  Implementation : Borland Turbo Pascal Compiler      }
  12.  
  13. Procedure SMenuFrame;
  14.   var row : Byte;
  15.   Begin
  16.     row:=(Height shr 3);
  17.     WriteAt(1,row,n,Stringof(205,(Width-2)));
  18.     WriteAt((Width shr 2)-2,(row+Menulines),n,Stringof(196,(Width shr 1)+4));
  19.     WriteAt(1,(row+Total_Menulines),n,Stringof(196,Width-2));
  20.   End;
  21.   { ** SMenuFrame ** }
  22.  
  23. Procedure Title{**(title_center:Byte;s:MenuTitle)**};
  24.  const  Doubleline = 205;
  25.   var   row,adjust : Byte;
  26.   Begin
  27.     row:=(Height shr 3);
  28.     adjust:=(length(s) shr 1);
  29.     if row<2
  30.       then row:=2;
  31.     WriteAt(1,row,n,Stringof(Doubleline,Width-2));
  32.     WriteAt(title_center-adjust,row,h,s);
  33.   End;
  34.   { ** Title ** }
  35.  
  36. Procedure ShowMenu{**(longest_MenuOp,title_center,first,last:Byte;s:MenuTitle)**};
  37.  const FKeyoffset = 7;
  38.   var  menu_center,
  39.        FNo,Aloc,
  40.        TmpHeight,
  41.        TmpWidth,
  42.        Adjcenter,
  43.        row       : Byte;
  44.        Offset,
  45.        Screen    : Integer;
  46.  
  47.   procedure CalcMenuVars;
  48.    const MinRow = 4;
  49.     begin
  50.       row:=(succ(Height div 3))-((last-first) shr 1);
  51.       if row < MinRow
  52.         then row:=MinRow;
  53.       menu_center:=(Width shr 1)-((longest_MenuOp+FKeyOffset) shr 1);
  54.       HltMenuR:=row-1;
  55.       HltMenuC:=menu_center+FKeyOffset;
  56.     end;
  57.  
  58.   procedure PadSetup;
  59.     begin
  60.       Offset:=CalcOffs(1,row);
  61.       TmpHeight:=Height; TmpWidth:=Width;
  62.       Height:=succ(last)-first;
  63.       Width:=HltMenuC+longest_MenuOp;
  64.     end;
  65.  
  66.   procedure PadWrite;
  67.     begin
  68.       FNo:=1; row:=1;
  69.       Adjcenter:=menu_center+2;
  70.       Screen:=(PadScr*100);
  71.       for Aloc:=first to last do
  72.         begin
  73.           WriteAt(menu_center,Screen+row,h,FKeys[FNo]);
  74.           WriteAt(Adjcenter,Screen+row,n,' ... '+MenuOps[Aloc]);
  75.           row:=row+1;
  76.           FNo:=FNo+1;
  77.         end;
  78.       Recall_Image(PadScr,Offset);
  79.     end;
  80.  
  81.   Begin
  82.     Title(title_center,s);
  83.     CalcMenuVars;
  84.     PadSetup;
  85.     PadWrite;
  86.     Erase_Screen(PadScr);
  87.     Height:=TmpHeight; Width:=TmpWidth;
  88.   End;
  89.   { ** ShowMenu ** }
  90.  
  91. Procedure ShowPrompts{**(row,prompt,fkey:Byte)**};
  92.  const AdjCenter = 32;
  93.   var  NewCenter    : Byte;
  94.  
  95.  Begin
  96.    NewCenter:=(AdjCenter-((length(FKeys[fkey])+length(FKeys[fkey+1])) shr 1));
  97.    NewCenter:=NewCenter-length(Prompts[prompt]);
  98.    GotoXY(1,row); Clreol;
  99.    WriteAt(NewCenter,row,n,Prompts[prompt]);
  100.    WriteAt(WhereX,WhereY,h,'  ['+FKeys[fkey]+']        ['+FKeys[fkey+1]+']  ');
  101.    WriteAt(WhereX,WhereY,n,Prompts[prompt+1]);
  102.  End;
  103.  { ** ShowPrompts ** }
  104.  
  105. Procedure ShowPrompt{**(row,prompt,fkey:Byte)**};
  106.  const AdjCenter = 39;
  107.   var  NewCenter : Byte;
  108.   Begin
  109.     NewCenter:=AdjCenter-(length(FKeys[fkey]) shr 1);
  110.     GotoXY(1,row); Clreol;
  111.     WriteAt(NewCenter,row,h,'['+FKeys[fkey]+']');
  112.     GotoXY(1,row+1); Clreol;
  113.     WriteAt(0,row+1,n,Prompts[prompt]);
  114.   End;
  115.   { ** ShowPrompt ** }
  116.  
  117. Procedure ShowMessage{**(OpNo:Byte)**};
  118.  Begin
  119.    GotoXY(1,Message_Line);
  120.    Clreol;
  121.    WriteAt(BaseScr,Message_Line,h,Messages[OpNo]);
  122.  End;
  123.  { ** ShowMessage ** }
  124.  
  125. Procedure ClrMenu;
  126.   Begin
  127.     Window(1,(succ(Height shr 3)),80,Total_Menulines);
  128.     ClrScr;
  129.     Window(1,1,80,25);
  130.   End;
  131.   { ** ClrMenu ** }
  132.  
  133. Procedure ClrPrompts;
  134.   Begin
  135.     Window(1,(Message_Line+2),80,25);
  136.     ClrScr;
  137.     Window(1,1,80,25);
  138.   End;
  139.   { ** ClrPrompts ** }
  140.  
  141. Procedure ClrMessage;
  142.   Begin
  143.    GotoXY(1,Message_Line);
  144.    Clreol;
  145.   End;
  146.   { ** ClrMessage ** }
  147.  
  148. Procedure ShowMenuResp{**(OptNum,OptRow,VAtt : Byte)**};
  149.   Begin
  150.   if VAtt=1
  151.     then begin
  152.            WriteAt(HltMenuC,HltMenuR+OptRow,h,MenuOps[OptNum]);
  153.            Delay(Wait_Duration shr 1);
  154.            WriteAt(HltMenuC,HltMenuR+OptRow,n,MenuOps[OptNum]);
  155.          end
  156.     else
  157.        WriteAt(HltMenuC,HltMenuR+OptRow,h,MenuOps[OptNum]);
  158.   End;
  159.   { ** ShowMenuResp ** }
  160.  
  161. Procedure ShowPages{**(LineType,Quan_of_Pages,UpLx,UpLy:Byte)**};
  162.   var hl,vl,tl,tr,bl,br,lj,rj,tj,bj,isect,Pno:Byte;
  163.   Begin
  164.     GotoXY(UpLx,UpLy);
  165.     for Pno:=1 to (Quan_of_Pages-1) do
  166.       begin
  167.         Whichline(LineType,hl,vl,tl,tr,bl,br,lj,rj,tj,bj,isect);
  168.         WriteAt(WhereX,WhereY,n,chr(tl));
  169.         WriteAt(WhereX,WhereY,n,Stringof(hl,24));
  170.         WriteAt(WhereX,WhereY,n,chr(tr));
  171.         WriteAt(WhereX-26,WhereY+1,n,chr(vl));
  172.         WriteAt(WhereX+24,WhereY,n,chr(vl));
  173.         WriteAt(WhereX-26,WhereY+1,n,chr(vl));
  174.         VLine(WhereX-1,WhereY,vl,10);
  175.         WriteAt(WhereX,WhereY,n,chr(bl)+chr(hl));
  176.         GotoXY(WhereX,WhereY-10);
  177.       end;
  178.       Frame(WhereX,WhereY,WhereX+25,WhereY+12,LineType,0);
  179.    End;
  180.    { ** ShowPages ** }
  181.